package panda.client.enumerations;


/**
 * Contains the name, abbreviation, and total number of cards in this Magic: The
 * Gathering basic set or expansion.
 * 
 * @author zane.tian@gmail.com
 */
public enum MagicSet {
	// tokens
	M_10_TOKENS("Magic 2010", "m10-tokens", 8),
	ALARA_REBORN_TOKENS("Alara Reborn", "arb-tokens", 4),
	CONFLUX_TOKENS("Conflux", "cfx-tokens", 2),
	SHARDS_OF_ALARA_TOKENS("Shards of Alara", "ala-tokens", 10),
	EVENTIDE_TOKENS("Eventide", "eve-tokens", 7),
	SHADOWMOOR_TOKENS("Shadowmoor", "shm-tokens", 12),
	MORNINGTIDE_TOKENS("Morningtide", "mt-tokens", 3),
	LORWYN_TOKENS("Lorwyn", "lw-tokens", 11),
	TENTH_EDITION_TOKENS ("Tenth Edition", "10e-tokens", 6),

	// magic 2010
	M_10("Magic 2010", "m10", 249),

	// shards of alara
	ALARA_REBORN("Alara Reborn", "arb", 145),
	CONFLUX("Conflux", "cfx", 145),
	SHARDS_OF_ALARA("Shards of Alara", "ala", 249),

	// shadowmoor
	EVENTIDE("Eventide", "eve", 180), 
	SHADOWMOOR ("Shadowmoor", "shm", 301),
	// lorwyn
	MORNINGTIDE ("Morningtide", "mt", 150),
	LORWYN ("Lorwyn", "lw", 301),
	// time spiral
	FUTURE_SIGHT ("Future Sight", "fut", 180),
	PLANAR_CHAOS ("Planar Chaos", "pc", 168),
	TIME_SPIRAL_TIMESHIFTED ("Time Spiral Timeshifted", "tsts", 122),
	TIME_SPIRAL ("Time Spiral", "ts", 301),
	// ice age	
	ICE_AGE ("Ice Age", "ia", 383),
	COLDSNAP ("Coldsnap", "cs", 155),
	ALLIANCES ("Alliances", "ai", 199),	
	// ravnica - the colon will cause errors in windows file systems
	RAVNICA_CITY_OF_GUILDS ("Ravnica: City of Guilds", "rav", 306),
	GUILDPACT ("Guildpact", "gp", 165),
	DISSENSION ("Dissension", "di", 190),
	// kamigawa
	CHAMPIONS_OF_KAMIGAWA ("Champions of Kamigawa", "chk", 317),
	BETRAYERS_OF_KAMIGAWA ("Betrayers of Kamigawa", "bok", 170),
	SAVIORS_OF_KAMIGAWA ("Saviors of Kamigawa", "sok", 170),	
	// mirrodin
	MIRRODIN ("Mirrodin", "mi", 306),
	DARKSTEEL ("Darksteel", "ds", 165),
	FIFTH_DAWN ("Fifth Dawn", "5dn", 165),	
	// onslaught
	SCOURGE ("Scourge", "sc", 143),
	LEGIONS ("Legions", "le", 145),
	ONSLAUGHT ("Onslaught", "on", 350),	
	// odyssey
	JUDGEMENT ("Judgement", "ju", 143),
	TORMENT ("Torment", "tr", 143),
	ODYSSEY ("Odyssey", "od", 350),	
	// invasion
	APOCALYPSE ("Apocalypse", "ap", 148),
	PLANESHIFT ("Planeshift", "ps", 143),
	INVASION ("Invasion", "in", 355),	
	// masquerade
	PROPHECY ("Prophecy", "pr", 143),
	NEMESIS ("Nemesis", "ne", 143),
	MERCADIAN_MASQUES ("Mercadian Masques", "mm", 350),	
	// artifacts
	URZAS_DESTINY ("Urza's Destiny", "ud", 143),
	URZAS_LEGACY ("Urza's Legacy", "ul", 143),
	URZAS_SAGA ("Urza's Saga", "us", 350),	
	// rath
	EXODUS ("Exodus", "ex", 143),
	STRONGHOLD ("Stronghold", "sh", 143),
	TEMPEST ("Tempest", "tp", 350),	
	// mirage
	WEATHERLIGHT ("Weatherlight", "wl", 167),
	VISIONS ("Visions", "vi", 167),
	MIRAGE ("Mirage", "mr", 350),		
	// early sets
	HOMELANDS ("Homelands", "hl", 140),
	FALLEN_EMPIRES ("Fallen Empires", "fe", 187),
	THE_DARK ("The Dark", "dk", 119),
	LEGENDS ("Legends", "lg", 310),
	ANTIQUITIES ("Antiquities", "aq", 100),
	ARABIAN_NIGHTS ("Arabian Nights", "an", 92),	
	// special sets
	PORTAL_THREE_KINGDOMS ("Portal Three Kingdoms", "p3k", 180),
	ELVES_VS_GOBLINS ("Duel Decks: Elves vs. Goblins", "evg", 62),
	// core sets
	LIMITED_EDITION_ALPHA ("Limited Edition (Alpha)", "al", 295),
	LIMITED_EDITION_BETA ("Limited Edition (Beta)", "be", 302),
	UNLIMITED_EDITION ("Unlimited Edition", "un", 302),
	REVISED_EDITION ("Revised Edition", "rv", 306),
	FOURTH_EDITION ("Fourth Edition", "4e", 378),
	FIFTH_EDITION ("Fifth Edition", "5e", 449),
	CLASSIC_SIXTH_EDITION ("Classic Sixth Edition", "6e", 350),
	SEVENTH_EDITION ("Seventh Edition", "7e", 350),
	CORE_SET_EIGHTH_EDITION ("Core Set - Eighth Edition", "8e", 350),
	CORE_SET_NINTH_EDITION ("Core Set - Ninth Edition", "9e", 350),
	TENTH_EDITION ("Tenth Edition", "10e", 383);
	
	private String name;
	private String abbreviation;	
	
	/* Total cards in this set, including duplicate artwork. */
	private int totalCards;

	private MagicSet(String name, String abbreviation, int totalCards) {
		this.name = name;
		this.abbreviation = abbreviation;
		this.totalCards = totalCards;
	}

	public String getName() {
		return name;
	}

	public String getAbbrev() {
		return abbreviation;
	}

	public int getTotalCards() {
		return totalCards;
	}
	
	public String toString() {
		return name;
	}
}